package com.librelato.persistencia;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.librelato.bean.CidadeBean;
import com.librelato.bean.FornecedorBean;
import com.librelato.bean.UsuarioBean;
import com.librelato.persistencia.config.SQLConfiguracao;
import com.librelato.persistencia.enums.EnumCondicao;
import com.librelato.persistencia.interfaces.IFornecedorDao;

public class FornecedorDao<P extends FornecedorBean> extends DaoGenerico<P>
		implements IFornecedorDao<P> {

	@Override
	public String procuraPorParam(String tabela, String campo, String valor,
			EnumCondicao condicao) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public P salvar(P p) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void excluir(P p) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void editar(P p) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void preSalvar(P p) {
		// TODO Auto-generated method stub

	}

	@SuppressWarnings("unchecked")
	public List<P> buscaFornecedor(Map<String, String> param) throws Exception {
		List<FornecedorBean> fornecedores = new ArrayList<FornecedorBean>();
		FornecedorBean fornecedor = null;
		ResultSet rs2 = null;
		try {
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_fornecedor");
			int psIndex = 1;
			if (param.get("CODIGO") != null) {
				query += " AND F.A2_COD LIKE ?";
			}
			if (param.get("NOME") != null) {
				query += " AND A2_NOME LIKE ?";
			}
			query += " ORDER BY A2_NOME";
			ps = conn.prepareStatement(query);
			if (param.get("CODIGO") != null) {
				ps.setString(psIndex++, param.get("CODIGO").trim()
						.toUpperCase()
						+ "%%");
			}
			if (param.get("NOME") != null) {
				ps.setString(psIndex++, "%%"
						+ param.get("NOME").trim().toUpperCase() + "%%");
			}
			rs = ps.executeQuery();
			while (rs.next()) {
				fornecedor = new FornecedorBean();
				fornecedor.setNome(rs.getString("A2_NOME").trim());
				fornecedor.setCodigo(rs.getString("A2_CODIGO").trim());
				fornecedor.setLoja(rs.getString("A2_LOJA").trim());
				fornecedor.setContato(rs.getString("A2_CONTATO").trim());
				fornecedor.setEmail(rs.getString("A2_EMAILPC").trim());
				fornecedor.setCgc(rs.getString("A2_CGC"));
				fornecedor.setInscricaoEstadual(rs.getString("A2_INSCR"));
				fornecedor.setNomeReduzido(rs.getString("A2_NREDUZ"));
				fornecedor.setCidade(new CidadeBean(rs.getString("A2_MUN").trim(), rs.getString("A2_EST").trim()));
				/*
				fornecedor.setEstado(rs.getString("A2_EST"));
				fornecedor.setCidade(rs.getString("A2_MUN"));
				*/
				fornecedor.setBairro(rs.getString("A2_BAIRRO"));
				fornecedor.setEndereco(rs.getString("A2_END"));
				fornecedor.setCep(rs.getString("A2_CEP"));
				fornecedor.setFone("("+rs.getString("A2_DDD").trim()+")-"+rs.getString("A2_TEL"));
				fornecedor.setEmailNF(rs.getString("A2_EMAIL"));
				query = SQLConfiguracao.getInstance().getValor("localiza_usuario_fornecedor");
				ps = conn.prepareStatement(query);
				ps.setString(1, fornecedor.getCodigo());
				rs2 = ps.executeQuery();
				if(rs2.next()) {
					fornecedor.setUsuario(new UsuarioBean(rs2.getString("LOGIN"), rs2.getString("SENHA")));
				}else {
					fornecedor.setUsuario(new UsuarioBean("", ""));
				}
				if ("SC".equals(rs.getString("A2_EST").trim())) {
					fornecedor.setValorIcmsPadrao(17.00);
				} else {
					fornecedor.setValorIcmsPadrao(12.00);
				}
				fornecedores.add(fornecedor);
			}

		} catch (Exception e) {
			throw e;
		}

		return (List<P>) fornecedores;
	}

	public FornecedorBean buscaFornecedor(String codigo) throws Exception {
		FornecedorBean fornecedor = null;
		try {
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_fornecedor");
			query += " AND LTRIM(RTRIM(A2_COD))+LTRIM(RTRIM(A2_LOJA)) = ?";
			query += " ORDER BY A2_NOME";
			ps = conn.prepareStatement(query);
			ps.setString(1, codigo.trim());
			rs = ps.executeQuery();
			while (rs.next()) {
				fornecedor = new FornecedorBean();
				fornecedor.setNome(rs.getString("A2_NOME").trim());
				fornecedor.setCodigo(rs.getString("A2_CODIGO").trim());
				fornecedor.setLoja(rs.getString("A2_LOJA").trim());
				fornecedor.setContato(rs.getString("A2_CONTATO").trim());
//				fornecedor.setEstado(rs.getString("A2_EST"));
				fornecedor.setCidade(new CidadeBean(rs.getString("A2_MUN"), rs.getString("A2_EST")));
				fornecedor.setEmail(rs.getString("A2_EMAILPC").trim());
				if ("SC".equals(rs.getString("A2_EST").trim())) {
					fornecedor.setValorIcmsPadrao(17.00);
				} else {
					fornecedor.setValorIcmsPadrao(12.00);
				}
			}

		} catch (Exception e) {
			throw e;
		}

		return fornecedor;
	}

}
